package config

import (
	"log"
	"time"

	"admin-system/internal/model"

	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

var DB *gorm.DB

// InitDatabase 初始化数据库连接
func InitDatabase() {
	// 配置GORM日志
	gormLogger := logger.New(
		log.New(log.Writer(), "\r\n", log.LstdFlags),
		logger.Config{
			SlowThreshold:             time.Second,
			LogLevel:                  logger.Info,
			IgnoreRecordNotFoundError: true,
			Colorful:                  true,
		},
	)

	var err error

	// 根据配置选择数据库类型
	if AppConfig.Mock.UseMockDB || AppConfig.Database.Type == "sqlite" {
		// 使用SQLite数据库（开发环境）
		log.Println("使用SQLite数据库（开发模式）")
		DB, err = gorm.Open(sqlite.Open(AppConfig.Database.FilePath), &gorm.Config{
			Logger: gormLogger,
		})
	} else {
		// 这里可以添加其他数据库类型的支持
		log.Fatalf("不支持的数据库类型: %s", AppConfig.Database.Type)
	}

	if err != nil {
		log.Fatalf("连接数据库失败: %v", err)
	}

	// 自动迁移数据库表结构
	err = DB.AutoMigrate(
		&model.User{},
		&model.Role{},
		&model.Menu{},
		&model.Permission{},
		&model.UserRole{},
		&model.RoleMenu{},
		&model.RolePermission{},
	)
	if err != nil {
		log.Fatalf("数据库迁移失败: %v", err)
	}

	log.Println("数据库连接和迁移成功")
}
